---
title: AutoCompute 自动计算引擎
icon: Calculator
relatedFile: app/src/core/service/dataGenerateService/autoComputeEngine/mainTick.tsx
---

这个服务是一个自动计算引擎，负责根据画布上文本节点、区域（Section）和连线（Edge）的内容，自动执行预定义的数学、逻辑、字符串处理和节点操作等功能。它通过识别特定文本作为函数名，并根据节点间的连接关系获取输入，然后将计算结果应用到相应的节点上。

### 核心功能

该服务维护了多组函数映射，用于处理不同类型的计算和操作：

*   **简单符号运算映射 (`MapOperationNameFunction`)**：包含基本的数学运算（加减乘除、取模、幂）和比较逻辑（小于、大于、等于、不等于），以及布尔逻辑运算（与、或、非、异或）。这些通常通过连线（Edge）上的文本触发。
*   **命名函数映射 (`MapNameFunction`)**：包含更广泛的数学函数（绝对值、取整、三角函数、对数、统计）、比较逻辑、布尔逻辑，以及字符串处理（大小写转换、长度、复制、分割、替换、连接、正则匹配）和编程相关功能（设置/获取变量）。这些通常通过文本节点或区域（Section）上的文本触发。
*   **其他特殊功能映射 (`MapOtherFunction`)**：包含与画布上实体（如节点、相机）交互的功能，例如设置/获取位置、大小、颜色、获取时间、播放声音、碰撞检测等。这些也通过文本节点上的文本触发。

### API 方法

#### `tick()`

这是服务的核心循环方法，在每个“帧”（或特定条件下）被调用。它执行以下操作：

1.  **识别和排序逻辑文本节点**：查找画布上内容匹配预定义函数名的文本节点，并按其在画布上的位置（先Y轴后X轴）进行排序。
2.  **执行文本节点计算**：对识别出的逻辑文本节点，根据其文本内容调用相应的函数，并根据其父节点获取输入，将计算结果生成到子节点或自身。
3.  **识别和排序逻辑区域（Section）**：查找内容匹配预定义函数名的区域，并按位置排序。
4.  **执行区域计算**：对识别出的逻辑区域，根据其文本内容调用相应的函数，并根据其内部的文本子节点获取输入，将计算结果生成到区域内的子节点或自身。
5.  **执行连线（Edge）计算**：遍历所有连线，如果连线文本匹配简单符号运算，则根据源节点和目标节点的文本执行计算，并将结果应用到目标节点。还支持简化的格式，如 "+5" 或 "/2"。
6.  **步进计数器**：每次执行完毕，内部计数器 `NodeLogic.step` 增加。

#### `funcTypeTrans(mF: MathFunctionType): StringFunctionType`

一个内部辅助方法，用于将接受数字数组并返回数字数组的数学函数 (`MathFunctionType`) 转换为接受字符串数组并返回字符串数组的函数 (`StringFunctionType`)。它负责将输入字符串转换为数字，执行数学运算，再将结果转换回字符串。

#### `isTextNodeLogic(node: TextNode): boolean`

判断给定的文本节点是否是一个逻辑节点（即其文本内容是否匹配任何预定义的函数名）。

#### `isSectionLogic(section: Section): boolean`

判断给定的区域（Section）是否是一个逻辑区域（即其文本内容是否匹配任何预定义的函数名）。

#### `sortEntityByLocation(entities: ConnectableEntity[]): ConnectableEntity[]`

一个内部辅助方法，用于根据实体的Y坐标（从上到下）和X坐标（从左到右）对可连接实体数组进行排序。

#### `computeTextNode(node: TextNode)`

负责执行单个文本节点的计算逻辑。它会检查节点文本是否匹配 `MapNameFunction` 或 `MapOtherFunction` 中的任何函数，然后获取父节点作为输入，执行相应函数并将结果生成。

#### `computeSection(section: Section)`

负责执行单个区域（Section）的计算逻辑。它会检查区域文本是否匹配 `MapNameFunction` 中的任何函数，然后获取区域内的文本子节点作为输入，执行相应函数并将结果生成。

#### `computeEdge(edge: LineEdge)`

负责执行单个连线（Edge）的计算逻辑。它会检查连线文本是否匹配 `MapOperationNameFunction` 中的任何函数，或者是否包含简化的运算符号和数字，然后根据源节点和目标节点的文本执行计算，并将结果应用到目标节点。
